'use strict';
/**
 * author：小小游 --- allen
 * date：2018.02.05
 * lastUpdateDate：2018.02.05
 * description：Set的基本用法
 */
/**
 * Set其实就是一种类数组的数据结构
 * Set通过new Set()创建一个对象，其本身也实现了Iterator接口
 * 所以也可以通过for..of进行循环遍历
 * Set的key和value是一样的
 * Set和Arr唯一的区别是：
 * 1.Set的值是唯一的，是不允许重复的
 * 2.Arr的值不是唯一的，是允许重复的
 * 3.Set会自动去除重复的值
 * 4.Arr不会自动去除重复的值
 */
/**
 * 学习下Set的add方法，支持链式操作
 * delete方法
 * has方法
 * size属性
 * clear方法
 * 如下例子所示：
 */
let set = new Set();
// { 'name' : 'allen', 'qq' : '13710681303' }
// 链式操作可以加入多条
// set.add({ 'name' : 'allen', 'qq' : '13710681303' }).add({ 'name' : 'allen', 'qq' : '13710681303' });
// let flag = set.delete({ 'name' : 'allen', 'qq' : '13710681303' });
/**
 * 注意这里flag返回的false，表示数据并未删除成功，为啥呢？
 * 下面我简单解释下：
 * 因为我们虽然肉眼看到都是删除的对象的{ 'name' : 'allen', 'qq' : '13710681303' }，
 * 但是它们在add和delete指向的内存空间地址是不一样的，所以就删不掉
 * 解决办法如下：
 */
let user = {
    'name' : 'allen',
    'qq' : '13710681303'
};
set.add(user).add(user);
// delete()方法返回boolean值
let flag = set.delete(user);
console.log(flag);
console.log(set);

set.add('allen').add('xiaoyou').add('yucy');
// has()方法返回boolean值 set.size表示Set的length
console.log(set.has('allen'), set.size);

// clear()方法清空Set里所有数据
console.log(`调用clear方法之前数据有${set.size}条`);
set.clear();
console.log(`调用clear方法之后数据有${set.size}条`);
